<?php
/**
 * Created by PhpStorm.
 * Author: Shadow
 * Date: 2022/1/19
 * Time: 10:52 上午
 * description: Cart.php
 */

namespace app\home\business;


use app\common\model\SpecGoods;

class Cart
{

    /**
     * 添加购物车
     * @param $sku_id
     * @param $number
     * @param int $is_selected
     * @return array|bool
     * @throws \think\Exception
     */
    public static function addCart($sku_id,$number,$is_selected=1){
        # 用户已登录、添加至数据库
        $sku_info = SpecGoods::find($sku_id)->toArray();
        if (!$sku_info) {
            return false;
        }
        # 判断用户是否登录
        if (session('?user_info')) {
            $res = \app\common\model\Cart::create([
                'user_id' => session('user_info.id'),
                'goods_id' => $sku_info['goods_id'],
                'number' => $number,
                'spec_goods_id' => $sku_id,
            ]);
            if ($res) {
                return  true;
            } else {
                return  false;
            }
        } else {
            # 用户未登录、添加至cookie
            $data = cookie('cart')?: [];
            //添加或修改数据数组 判断是否存在相同的记录（商品id相同，sku的id相同）
            $key = $sku_info['goods_id'] . '_' . $sku_id;
            if(isset($data[$key])){
                //存在相同记录 则累加数量
                $data[$key]['number'] += $number;
                $data[$key]['is_selected'] = $is_selected;
            }else{
                //不存在相同记录 则添加新的数据（键值对）
                $data[$key] = [
                    'id' => $key,
                    'user_id' => '',
                    'goods_id' => $sku_info['goods_id'],
                    'spec_goods_id' => $sku_id,
                    'number' => $number,
                    'is_selected' => $is_selected
                ];
            }
            //重新保存新数组到cookie
            cookie('cart', $data, 86400*7);
        }
        return  true;
    }

    /**
     * 查询购物车数据
     */
    public static function selectCart(){
        # 判断用户是否登录
        if (session('?user_info')) {
            # 用户登录了
            $data = \app\common\model\Cart::with(['goods','spec_goods'])->where(['user_id' => session('user_info.id')])->select()->toArray();
            return  $data;
        } else {
            # 用户未登录、查cookie
            return [];
        }
    }

    /**
     * 修改购物车商品数量
     * @param $id
     * @param $number
     * @return array|bool
     */
    public static function changNumber($id,$number) {
        # 判断用户是否登录
        if (session('?user_info')) {
            # 用户登录了
            \app\common\model\Cart::where('id',$id)->update(['number' => $number]);
            return  true;
        } else {
            # 用户未登录、修改cookie
            return [];
        }

    }

    /**
     * 修改购物车商品选中状态
     * @param $id
     * @param $is_selected
     * @return array|bool
     */
    public static function changeSelected($id,$is_selected) {
        # 判断用户是否登录
        if (session('?user_info')) {

            # 用户登录了
            # 是否是全部修改
            if ($id == 0) {
                \app\common\model\Cart::where('user_id',session('user_info.id'))->update(['is_selected' => $is_selected]);
            } else {
                \app\common\model\Cart::where('id',$id)->update(['is_selected' => $is_selected]);
            }

            return  true;
        } else {
            # 用户未登录、修改cookie
            return [];
        }

    }

    /**
     * 购物车删除
     * @param $id
     * @return array|bool
     */
    public static function cartDelete($id) {
        # 判断用户是否登录
        if (session('?user_info')) {
            # 用户登录了
            \app\common\model\Cart::destroy($id);
            return  true;
        } else {
            # 用户未登录、修改cookie
            return [];
        }
    }
}